1. Statement of the Technical Field
The present invention relates to application component distribution, and more particularly to the prioritization of application component distribution.
2. Description of the Related Art
Application component distribution involves the transfer of program logic from a source data store to a destination data store. Many years ago, application component distribution mostly included the duplication of one or more program files from removable media to permanent data storage in a target network domain. With the advent of global computing facilitated by the growth of the Internet, however, application component distribution often involves the electronic transfer of discrete portions of an application over several data communications networks into a target data store.
Application component distribution obviously contemplates the distribution of previously uninstalled application components. Notably, application component distribution also contemplates the upgrading and patching of a previous installation. In a primitive form of upgrading and patching, end users retrieve designated portions of application logic from a centralized data store. While placing the burden of upgrading and patching upon the end user can be convenient from the perspective both of the software distributor and the end user, in many circumstances, it will be ill-advised to rely upon end users to initiate the upgrading and patching process. In particular, in the modern enterprise, the application component distribution process is best left to information technologists.
In this regard, application component distribution remains an important aspect of information technology management. During the application lifecycle, several events can result in the upgrading or patching of one or more application components. Examples include application enhancements and modifications. More recently, design flaws and inoperable or malfunctioning portions of code require the patching of an application. In many cases, the design flaws have substantial security implications requiring a speedy resolution. In other circumstances, inoperable or malfunctioning portions of code result in an inability to complete mission critical transactions. As such, in many cases, the task of distributing application component upgrades and modifications will lie with information technology management.
In many circumstances, application component distribution involves multiple fan-out servers located about the globe. Through this network of fan-out servers, application component updates and patches can be distributed at a pace dictated by the level of urgency associated with the deployment of the application components. Where there is little urgency to distributing an update or patch, application component updates can be distributed over a substantial period of time. In contrast, where a deployment of a patch or update has been deemed critical, the opposite will be true.
When facing the urgency of deploying one or more application component updates or patches, the application component infrastructure may not be able to accommodate the simultaneous deployment of updates and patches to all recipients. Accordingly, often a choice must be made as to which clients are to receive a patch or update and which clients are to wait. Conventionally, these choices are made randomly or manually. For the smaller enterprise, an optimal selection can be approximated manually. For the larger enterprise, however, it is not possible for information technology management to aptly identify those clients requiring an immediate update and those clients for whom a delay in receiving an update or patch will be of no consequence.
In the modern era of computing, a trend has developed in the assembly and management of computing systems. Specifically, autonomic computing represents a leading edge strategy for creating and managing enterprise level computing systems and represents the principal challenge of computer science today. In the famed manifesto, Autonomic Computing: IBM's Perspective on the State of Information Technology, Paul Horn, Senior Vice President of IBM Research, observed, “It's not about keeping pace with Moore's Law, but rather dealing with the consequences of its decades-long reign.” Given this observation, Horn suggested a computing parallel to the autonomic nervous system of the biological sciences. Namely, whereas the autonomic nervous system of a human being monitors, regulates, repairs and responds to changing conditions without any conscious effort on the part of the human being, in an autonomic computing system, the system must self-regulate, self-repair and respond to changing conditions, without requiring any conscious effort on the part of the computing system operator.
Thus, while the autonomic nervous system can relieve the human being from the burden of coping with complexity, so too can an autonomic computing system. Rather, the computing system itself can bear the responsibility of coping with its own complexity. The crux of the IBM manifesto relates to eight principal characteristics of an autonomic computing system:
I. The system must “know itself” and include those system components which also possess a system identify.
II. The system must be able to configure and reconfigure itself under varying and unpredictable conditions.
III. The system must never settle for the status quo and the system must always look for ways to optimize its workings.
IV. The system must be self-healing and capable of recovering from routine and extraordinary events that might cause some of its parts to malfunction.
V. The system must be an expert in self-protection.
VI. The system must know its environment and the context surrounding its activity, and act accordingly.
VII. The system must adhere to open standards.
VIII. The system must anticipate the optimized resources needed while keeping its complexity hidden from the user.
Quite clearly, the conventional manner of deploying updates and patches in an application component distribution system falls far short of the eight tenants of autonomic computing.